/**
 * 认证相关工具函数
 */

import { useUserStore } from '@/store/user'

/**
 * 处理401未登录响应
 * @param response API响应对象
 * @returns 是否为401未登录响应
 */
export function handle401Response(response: any): boolean {
  if (response && response.code === 401) {
    console.log('服务器返回401，用户未登录:', response.msg)

    // 清除本地登录状态
    const userStore = useUserStore()
    userStore.logout()

    // 跳转到登录页面
    uni.reLaunch({
      url: '/pages/login/index',
    })

    return true
  }
  return false
}

/**
 * 检查用户登录状态，如果未登录则跳转到登录页面
 * @param redirectUrl 登录成功后要跳转的页面URL（可选）
 * @returns 是否已登录
 */
export function checkLoginStatus(redirectUrl?: string): boolean {
  const userStore = useUserStore()

  if (!userStore.isLoggedIn) {
    console.log('用户未登录，跳转到登录页面')

    // 构建登录页面URL，可以携带重定向参数
    let loginUrl = '/pages/login/index'
    if (redirectUrl) {
      loginUrl += `?redirect=${encodeURIComponent(redirectUrl)}`
    }

    uni.reLaunch({
      url: loginUrl,
    })
    return false
  }

  return true
}

/**
 * 需要登录保护的页面列表
 */
export const PROTECTED_PAGES = [
  '/pages/my/index',
  '/pages-sub/profile/my-dubbing/index',
  '/pages-sub/profile/my-favorites/index',
  '/pages-sub/profile/reading-history/index',
  '/pages-sub/profile/profile-edit/index',
  '/pages-sub/profile/trash/index',
  '/pages-sub/plan/create-plan/index',
  '/pages-sub/plan/edit-plan/index',
  '/pages-sub/plan/plan-detail/index',
  '/pages/checkin/index',
  '/pages/checkin-calendar/index',
  '/pages/study-checkin/index',
]

/**
 * 检查当前页面是否需要登录保护
 * @param currentPath 当前页面路径
 * @returns 是否需要登录保护
 */
export function isProtectedPage(currentPath: string): boolean {
  return PROTECTED_PAGES.some(page => currentPath.includes(page))
}

/**
 * 页面级别的登录检查混入函数
 * 在页面的 onLoad 和 onShow 中调用
 */
export function useAuthGuard() {
  const checkAuth = (currentPath?: string) => {
    // 获取当前页面路径
    const pages = getCurrentPages()
    const currentPage = pages[pages.length - 1]
    const pagePath = currentPath || `/${currentPage.route}`

    // 检查是否需要登录保护
    if (isProtectedPage(pagePath)) {
      return checkLoginStatus(pagePath)
    }

    return true
  }

  return {
    checkAuth,
  }
}
